package com.doit.spark.day03

import com.doit.spark.day01.utils.SparkUtil
import org.apache.spark.rdd.RDD

import scala.collection.mutable

/**
 * @DATE 2022/1/5/9:35
 * @Author MDK
 * @Version 2021.2.2
 * */
object C01_分布式闭包 {
  //Driver端  创建环境 提交程序
  def main(args: Array[String]): Unit = {
    //获取环境
    val sc = SparkUtil.getSc
    //创建RDD
    val rdd: RDD[Int] = sc.makeRDD(List[Int](1, 2, 3, 4, 5), 2)
    val mp = mutable.HashMap[Int, String]((1, "zss"), (2, "lss"), 3 -> "ww", (4, "zl"), 5 -> "tq")
    //转换算子计算数据
    var i =0
    val rdd2 = rdd.map(e => {
      i+=1
      val name = mp.get(e).get
      //i是被分配到各个不同的executor上执行task运算  各个task之间是多线程关系
      (name, e * e, i)
    })
    rdd2.glom().map(_.toList).foreach(println)
    //行动算子触发执行
    rdd2.foreach(println)
    println(i)
    //释放资源
    sc.stop()
  }
}
